Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: demanik, ivan_fd  
Многоканальный ШИМ
mikhail09p Дата: Вс, 03.10.2010, 17:54  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 481
Репутация: 14   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Здравствуйте, спецы!
А как на одном микроконтроллере реализовать 6 каналов ШИМ? Есть у кого пример?
ЯНДЕКС Дата: 03.10.2010
brown Дата: Вс, 03.10.2010, 18:26  |                                                                                                                Сообщение # 2
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 333
Репутация: 12   ±
Замечания:   ±
На сайте с 18.09.2007

Статус: Offline

Программный не знаю, а аппаратный есть в PIC18F1230, PIC18F1330. Подробнее смотри даташит.

Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
DAlexV Дата: Вс, 03.10.2010, 19:35  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 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
Репутация: 14   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Даташит посмотрим, но хотелось бы научится программно написать. На Бейсике возможно?
DAlexV Дата: Вс, 03.10.2010, 19:51  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 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
Репутация: 14   ±
Замечания:   ±
На сайте с 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
Репутация: 27   ±
Замечания:   ±
На сайте с 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
Репутация: 14   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Quote (DAlexV)
Возникает такой же вопрос "что ????"

Период ШИМ, что же ещё.
Я же просил на Бейсике...

Сообщение отредактировал mikhail09p - Вс, 03.10.2010, 21:41
DAlexV Дата: Вс, 03.10.2010, 21:51  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 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
Репутация: 14   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Ага, изменяя ch1_PWM, ch2_PWM, ch3_PWM и т.д. мы тем самым изменяем период ШИМ на выходе соответствующего каннала?
DAlexV Дата: Вс, 03.10.2010, 22:08  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Абсолютлих верно !!!!!
И еще что бы не наступал на мои грабли
if ch1_PWM<pwm_val then
low(portc.0)
else
high(portc.0)
end if
сравнение if then else лучше оставить. если сделать только if и then, то будет наблюдаться смещение прохождения прерывания по времени. Хотя это уж от конкретно поставленной задачи.
Рад помочь wink


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
ЯНДЕКС Дата: 03.10.2010
  • Страница 1 из 1
  • 1
Поиск: