Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
04.07.2013, 13:11
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: Шаговый мотор (микрошаг) + атмега
я имею ввиду "точно" применимо к часам Для часов должно сойти? Чтоб за сутки электронные часы и стрелка не расходились на пару часов ))
|
|
|
|
04.07.2013, 13:17
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: Шаговый мотор (микрошаг) + атмега
пока набросал вот такой код:
PHP код:
|
switch (step)
{
case 0:
A=0; B=0; OCR1A=255; OCR1B=0;
break;
case 1:
A=1; B=0; OCR1A=255; OCR1B=0;
break;
case 2:
A=0; B=1; OCR1A=255; OCR1B=0;
break;
case 3:
A=1; B=1; OCR1A=255; OCR1B=0;
break;
case 4:
A=0; B=0; OCR1A=0; OCR1B=255;
break;
case 5:
A=1; B=0; OCR1A=0; OCR1B=255;
break;
case 6:
A=0; B=1; OCR1A=0; OCR1B=255;
break;
case 7:
A=1; B=1; OCR1A=0; OCR1B=255;
break;
};
|
поворачивается когда step равно 2,4,6,0.
Подскажите я вроде чтото пропустил? Это получился полношаг, а надо сделать полушаг, чтобы потом ШИМ проверять?
Убрал лишние строки где нет поворотов:
PHP код:
|
switch (step)
{
case 0:
A=0; B=0; OCR1A=255; OCR1B=0; //25%
break;
case 1:
A=0; B=1; OCR1A=255; OCR1B=0; //75%
break;
case 2:
A=0; B=0; OCR1A=0; OCR1B=255; //25%
break;
case 3:
A=0; B=1; OCR1A=0; OCR1B=255; //50%
break;
};
|
Последний раз редактировалось miwutka; 04.07.2013 в 13:29.
|
|
|
|
04.07.2013, 14:06
|
|
Вид на жительство
Регистрация: 30.10.2007
Адрес: Ростов-на-Дону
Сообщений: 285
Сказал спасибо: 23
Сказали Спасибо 39 раз(а) в 33 сообщении(ях)
|
Re: Шаговый мотор (микрошаг) + атмега
Что это за "ужасы нашего городка"?!
Забейте в таблицу значения для адреса и состояния регистра ШИМ и записывайте выбирая из массива по индексу. Соответственно настроив таймер на нужный интервал времени (1с, 0,1с - 60 и 600 значений).
Создаёте 3 массива (адрес, ШИМ А и ШИМ В), записываете туда нужные значения и перебираете индекс, выводя в регистры.
Эти массивы можно сгенерировать автоматически или для начала набить ручками!
const unsigned char addr[60]={0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3...};
const unsigned char pwma[60]={255, 128, 64, 0, ...
const unsigned char pwmb[60]={255, 255, 255, 255, ...
Инициализируем индекс: char ind=0;
Обработчик прерывания с нужной частотой:
int_n()
{
выбираем значения и записываем в регистры
порт куда прикручены адреса 4052 дешифратора = addr[ind];
(тут биты двигать и маски ставить по вкусу)
регистр(ы) ШИМ А = pwma[ind]
регистр(ы) ШИМ B = pwmb[ind]
инкремент указателя и контроль результата
if(ind‹конца_индекса_массива)ind++;else ind=0;
}
сейчас нас выгонят в раздел "радио начинающим"
Последний раз редактировалось vspvsp; 04.07.2013 в 14:10.
|
|
|
|
04.07.2013, 14:40
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: Шаговый мотор (микрошаг) + атмега
Я потом хотел в масивы забить Я сейчас хочу всё наглядно увидеть и каждый шаг отследить. Инкремент делать хочу кнопкой пока, а потом, когда всё прожую, поставлю на таймер.
const unsigned char addr[60]={0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3...};
const unsigned char pwma[60]={255, 128, 64, 0, ...
const unsigned char pwmb[60]={255, 255, 255, 255, ...
не могу продлить массивы ШИМов. Покажите плиз как надо написать Пишу свою таблицу, а мотор двигаеться как ему угодно и куда угодно......
|
|
|
|
04.07.2013, 14:50
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: Шаговый мотор (микрошаг) + атмега
пошел перекушу а то уже совсем туплю )). Кстати
, 255 это 100% или 0% ?? По моей программе это 100%
PHP код:
|
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
// Mode: Fast PWM top=0x00FF
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xA1;
TCCR1B=0x0B;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
|
|
|
|
|
04.07.2013, 16:19
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: Шаговый мотор (микрошаг) + атмега
вообщем понял почему так туго идет процесс у меня .У мотора 6 проводов:
- 2 красных
- 2 желтых
- 2 белых
Белые это средние провода обмоток. Красный-желтый - одна обмотка, красный-желтый - другая обмотка.
На ULN2003 к выходам(1,2,3,4) подключал так - красный, желтый, красный, желтый.
Теперь подключил так - красный, красный, желтый, желтый и получилось сделать полушаговый режим.... Сейчас попробую сделать полушаг, а потом ШИМ буду пробовать, а то изначально была ошибочка у меня в подключении.
|
|
|
|
04.07.2013, 16:30
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: Шаговый мотор (микрошаг) + атмега
Получилось сделать полушаг. Вот что вышло:
PHP код:
|
switch (step)
{
case 0:
A=0; B=0; OCR1A=255; OCR1B=0; //25%
break;
case 1:
A=0; B=0; OCR1A=255; OCR1B=255; //25%
break;
case 2:
A=0; B=1; OCR1A=255; OCR1B=0; //75%
break;
case 3:
A=0; B=1; OCR1A=255; OCR1B=255; //75%
break;
case 4:
A=1; B=0; OCR1A=255; OCR1B=0; //25%
break;
case 5:
A=1; B=0; OCR1A=255; OCR1B=255; //50%
break;
case 6:
A=1; B=1; OCR1A=255; OCR1B=0; //50%
break;
case 7:
A=1; B=1; OCR1A=255; OCR1B=255; //50%
break;
};
|
Ток не ругайте за такой "колхоз" в тексте )). Как отлажу сделаю всё красиво
Теперь буду пробовать ШИМ.
|
|
|
|
04.07.2013, 17:16
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: Шаговый мотор (микрошаг) + атмега
Получилось сделать микрошаг Сделал его ооочень маленьким - 0,8,16,24,32,40... 255 воть таким спасибо всем и особенно vspvsp,которому хватило терпения со мной возиться позже сделаю видео, может завтра. Сейчас надо найти даташит на "моторчик" ДШ35 0,015 7,5 0,66А РИТМ 10 Ом
я так понимаю в названии 7,5 это градус на который делает один полный шаг? А что такое 0,015? 0,66 А это на одну обмотку или на две? Может кто знает...
|
|
|
|
04.07.2013, 19:51
|
|
Вид на жительство
Регистрация: 30.10.2007
Адрес: Ростов-на-Дону
Сообщений: 285
Сказал спасибо: 23
Сказали Спасибо 39 раз(а) в 33 сообщении(ях)
|
Re: Шаговый мотор (микрошаг) + атмега
1. Ну вы даёте! Обмотки первым делом нужно было определить!
2. Что принять за 100% 0 или 255 вы сами задаёте битами в регистрах ШИМ и схемой, которая к нему подключена! В вашем случае, думаю, 255=100% (нужно учитывать инверсию выхода ШИМ и каков ключ на обмотки).
3. Массивы ШИМ нужно для пущей гладкости считать по формуле, что дал makakus: U=sin(ωt)+k*sin(3*ωt) соответственно сдвинув фазу следующей обмотки на 90 град. иначе микрошаг будет неравномерен, в середине интервала шаги будут больше. Пример кривой можно глянуть в даташите на A3967 что уже приводили.
Далее я чисто догадываюсь и вообще могу сильно ошибаться, проверяйте математику сами:
4. Чтобы точно заполнить массивы нужно 48 шагов вашего двигателя (если там 7,5 шаг) разделить на 60 (не факт, что получится, двигатель может проскакивать шаги в некоторых местах, так как соотношение 5 частей на 4 шага) или 600, если через 0,1с. частей. Рисуйте на бумажке 4 графика токов обмоток по формуле с синусами на 360 град (это не полный оборот, это 60 град. у вала двигателя, но нет смысла продолжать, так как оно повторяется). Так же туда же пишите 8 смен адреса (проверьте, что 8 ) и на всё это накладывайте 10 (или 100) отрезков, который пройдёт ваша секундная стрелка и всмотрите, какие значения адресного счётчика и уровней ШИМ получаются для этих 10 или 100 точек. Пробуйте вывести формулу, у меня фантазия закончилась!
Последний раз редактировалось vspvsp; 04.07.2013 в 19:54.
|
|
|
|
04.07.2013, 21:06
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: Шаговый мотор (микрошаг) + атмега
vspvsp, спасибо за советы Я обмотки еще за долго определил, вот ток не знал как их подключать )) К атмеге у меня подключен ЖК и я на нем сразу смотрю значения шима и считаю шаги, на глаз. Только хотел спросить формулу для расчета. Завтра буду расчитывать всё. Сделал микрошаг такой: 0,8,16,24,32,40 ... 255 - прошел мотор каждый микрошаг вперед и назад без пропусков. Теперь дело осталось за малым, вроде. Я в экселе начал делать таблицу. Думаю туда забить формулу и так высчитать. Я вообще потом хочу не таблицу забивать, а формулу по которой МК сам будет понимать какой ШИМ давать(если это не ухудшит точность, надо же чтобы целые значения получались). Но всё постепенно. Я ж не такой спец как все тут
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:14.
|
|