Многоканальный ШИМ
|
|
mikhail09p |
Дата: Вс, 03.10.2010, 17:54 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Здравствуйте, спецы! А как на одном микроконтроллере реализовать 6 каналов ШИМ? Есть у кого пример?
|
|
|
|
brown |
Дата: Вс, 03.10.2010, 18:26 | Сообщение # 2 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
333
Замечания:
±
На сайте с 18.09.2007
Статус:
Offline
|
Программный не знаю, а аппаратный есть в PIC18F1230, PIC18F1330. Подробнее смотри даташит.
Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
|
|
|
|
DAlexV |
Дата: Вс, 03.10.2010, 19:35 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
657
Замечания:
±
На сайте с 13.05.2008
Статус:
Offline
|
1 таймер период прерывания - один шаг PWM. Внутри прерывания: interrupt inc(pwm_val) // для одного канала PWM if ch1_PWM<pwm_val then low(portc.0) else high(portc.0) end if // для других каналов то же самое end interrupt
Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
|
|
|
|
mikhail09p |
Дата: Вс, 03.10.2010, 19:40 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Даташит посмотрим, но хотелось бы научится программно написать. На Бейсике возможно?
|
|
|
|
DAlexV |
Дата: Вс, 03.10.2010, 19:51 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
657
Замечания:
±
На сайте с 13.05.2008
Статус:
Offline
|
Quote (mikhail09p) На Бейсике возможно? да пожалуйста http://www.sfcompiler.co.uk/forum/viewtopic.php?t=708&highlight=pwm
Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
|
|
|
|
mikhail09p |
Дата: Вс, 03.10.2010, 19:59 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Quote (DAlexV) interrupt inc(pwm_val) // для одного канала PWM if ch1_PWM<pwm_val then low(portc.0) else high(portc.0) end if // для других каналов то же самое end interrup А как изменять? Можно поподробней?
|
|
|
|
DAlexV |
Дата: Вс, 03.10.2010, 20:13 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
657
Замечания:
±
На сайте с 13.05.2008
Статус:
Offline
|
Quote (mikhail09p) А как изменять? Возникает такой же вопрос "что ????" http://www.radiohlam.ru/program/RGB_prog.htm http://www.microchip.ru/phorum/read.php?f=2&i=85612&t=85612 http://www.remexpert.com/ipb/topic3725.html
Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
|
|
|
|
mikhail09p |
Дата: Вс, 03.10.2010, 21:28 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Quote (DAlexV) Возникает такой же вопрос "что ????" Период ШИМ, что же ещё. Я же просил на Бейсике...
Сообщение отредактировал
mikhail09p - Вс, 03.10.2010, 21:41
|
|
|
|
DAlexV |
Дата: Вс, 03.10.2010, 21:51 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
657
Замечания:
±
На сайте с 13.05.2008
Статус:
Offline
|
Quote (mikhail09p) Период ШИМ, что же ещё. Сколько бит должно быть в ШИМе. 8,16,10. От этого и пляшем. Quote (DAlexV) 1 таймер период прерывания - один шаг PWM. частота прерывания прерывания=период ШИМ / кол-во шагов ШИМ. Допустим частота ШИМ 10ms, Разряжность ШИМ 8 Бит(0-255) 10ms/256=0,0390625ms выставляем таймер 1 на прерывание в 0,0390625ms внутри прерывания есть переменная pwm_val.Это счетчик шагов. Он увеличивается на 1 при каждом прерывании. Далее сравниваем это значение со значениями для каждого канала ШИМ (ch1_PWM, ch2_PWM, ch3_PWM и т.д.) если значение меньше чем значение счетчика значит оставляем порт без изменений, если достигло или больше, то меняем состояние порта. Рабочий пример в данным момент не могу выложить, т.к. есть некоторые запарки с Лицензией, да и это будет на SwordFish Basic, а у него есть некоторые расхождения PBP и Протоном. Так что извини.
Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
|
|
|
|
mikhail09p |
Дата: Вс, 03.10.2010, 22:02 | Сообщение # 10 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Ага, изменяя ch1_PWM, ch2_PWM, ch3_PWM и т.д. мы тем самым изменяем период ШИМ на выходе соответствующего каннала?
|
|
|
|
DAlexV |
Дата: Вс, 03.10.2010, 22:08 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
657
Замечания:
±
На сайте с 13.05.2008
Статус:
Offline
|
Абсолютлих верно !!!!! И еще что бы не наступал на мои грабли if ch1_PWM<pwm_val then low(portc.0) else high(portc.0) end if сравнение if then else лучше оставить. если сделать только if и then, то будет наблюдаться смещение прохождения прерывания по времени. Хотя это уж от конкретно поставленной задачи. Рад помочь
Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
|
|
|
|