частотник на stm32f4
- Сообщения: 440
- Зарегистрирован: Вс дек 29, 2019 08:05:21
В протеусе я 3 фазы вывел.Но по практике протеус немного не правильно работает.И по моему в протеусе нет трёхфазного асинхронного двигателя.И ключевой микросхемы.у меня 7.10 версия
- Реклама
- Сообщения: 1849
- Зарегистрирован: Вс дек 25, 2016 08:34:54
Что-то сомневаюсь.ivan dimir писал(а):В протеусе я 3 фазы вывел.
Пока, в инете, ни одной внятной схемы не видел, что бы хоть как-то соответствовала действительности.
Вот тебе примитив в протеусе
Спойлер
- Сообщения: 440
- Зарегистрирован: Вс дек 29, 2019 08:05:21
Возможность менять характеристику U/F это что такое?
Добавлено after 9 hours 13 minutes 30 seconds:
[uquote="Dimon456",url="/forum/viewtopic.php?p=4114636#p4114636"]
Пока, в инете, ни одной внятной схемы не видел, что бы хоть как-то соответствовала действительности.
Вот тебе примитив в протеусеэтот примитив люди и стараются повторить, но не больше, к примеру, вот, со всеми вытекающими последствиями - не работоспособность, как тебе твой спец говорил.[/uquote]
Я три фазы вывел программой.
Добавлено after 9 hours 13 minutes 30 seconds:
[uquote="Dimon456",url="/forum/viewtopic.php?p=4114636#p4114636"]
Что-то сомневаюсь.ivan dimir писал(а):В протеусе я 3 фазы вывел.
Пока, в инете, ни одной внятной схемы не видел, что бы хоть как-то соответствовала действительности.
Вот тебе примитив в протеусе
Спойлер
Я три фазы вывел программой.
[uquote="ivan dimir",url="/forum/viewtopic.php?p=4114315#p4114315"]Правильно установка частоты.А управлять нужно таймером ШИМа или другим таймером который в прерывании работает.Я имею ввиду организации 3 фаз .Три года тому назад на Atmega 128 правда в протеусе организовывал 3 фазы .3 ШИМа одного таймера и в прерывании другого таймера.А на СТМ32 что бы упрвлять нужно третий таймер.Ну а можно замисть прерывания по таймеру использовать ДМА.И Ещё один вопрос .Плавный запуск с 0 Гц или с 5 Гц.Настройка должна быть с 5 Гц.и выше.Ниже 5 Гц двигатель будет сильно нагреваться.Так сказал мне один спец.Я хотел бы услышать ваше мнение.Есть в нете много инфы.А если фомулу будет вычеслять СТМ32 .И присваивать значение в массиве в переменные.СТМ будет успивать?[/uquote]
На STM32 хватит и одного таймера. Это TIMER 1 или TIMER 8 (если не ошибаюсь). С помощью DMA можно организовать их обновление из массива структур. Читайте про регистр TIMx->DMAR и его управляющий регистр. Эта фича позволит даже выдать ШИМ, промодулированный синусом. Правда, шесть ключей потребует (три полумоста).
На STM32 хватит и одного таймера. Это TIMER 1 или TIMER 8 (если не ошибаюсь). С помощью DMA можно организовать их обновление из массива структур. Читайте про регистр TIMx->DMAR и его управляющий регистр. Эта фича позволит даже выдать ШИМ, промодулированный синусом. Правда, шесть ключей потребует (три полумоста).
I am DX168B and this is my favourite forum on internet!
- Сообщения: 1849
- Зарегистрирован: Вс дек 25, 2016 08:34:54
Что-то сомневаюсь что там синус, хоть бы аппроксимация синусоиды была.
Возьмем из моего видео драйвер двигателя HA13483AMP, что бы вам не искать, осциллографом на выходе драйвера я ни какой синус не увидел,
там ШИМ, но в зависимости от нагрузки скважность изменяется (поддержание определенной частоты вращения), начинаешь притормаживать скважность увеличивается. При 360 оборотов период следования импульсов, примерно 3,6 милли сек.
А теперь представьте если бы там был синусный ШИМ, да еще и без всяких там фильтров.
Сколько было бы там шума?
Какова должна быть частота ШИМ, что бы человек не слышал этот шум, я думаю вы все пробовали регулировать скорость коллекторного двигателя с помощью ШИМ?
Представьте к частотному преобразователю подключен 75 кВт двигатель дымососа в котельной, и я не слышу там ни какого шума, свиста и тп, ни в момент разгона, ни в момент работы. Кстати разгон от 35Гц и до 45Гц в течении 30 секунд. К сожалению все клеммные колодки опечатаны и осциллографом туды ткнуться не получится.
Хотел бы услышать ответ от спецов.
Возьмем из моего видео драйвер двигателя HA13483AMP, что бы вам не искать, осциллографом на выходе драйвера я ни какой синус не увидел,
там ШИМ, но в зависимости от нагрузки скважность изменяется (поддержание определенной частоты вращения), начинаешь притормаживать скважность увеличивается. При 360 оборотов период следования импульсов, примерно 3,6 милли сек.
А теперь представьте если бы там был синусный ШИМ, да еще и без всяких там фильтров.
Сколько было бы там шума?
Какова должна быть частота ШИМ, что бы человек не слышал этот шум, я думаю вы все пробовали регулировать скорость коллекторного двигателя с помощью ШИМ?
Представьте к частотному преобразователю подключен 75 кВт двигатель дымососа в котельной, и я не слышу там ни какого шума, свиста и тп, ни в момент разгона, ни в момент работы. Кстати разгон от 35Гц и до 45Гц в течении 30 секунд. К сожалению все клеммные колодки опечатаны и осциллографом туды ткнуться не получится.
Хотел бы услышать ответ от спецов.
- Реклама
- Сообщения: 440
- Зарегистрирован: Вс дек 29, 2019 08:05:21
[uquote="DX168B",url="/forum/viewtopic.php?p=4115732#p4115732"][uquote="ivan dimir",url="/forum/viewtopic.php?p=4114315#p4114315"]Правильно установка частоты.А управлять нужно таймером ШИМа или другим таймером который в прерывании работает.Я имею ввиду организации 3 фаз .Три года тому назад на Atmega 128 правда в протеусе организовывал 3 фазы .3 ШИМа одного таймера и в прерывании другого таймера.А на СТМ32 что бы упрвлять нужно третий таймер.Ну а можно замисть прерывания по таймеру использовать ДМА.И Ещё один вопрос .Плавный запуск с 0 Гц или с 5 Гц.Настройка должна быть с 5 Гц.и выше.Ниже 5 Гц двигатель будет сильно нагреваться.Так сказал мне один спец.Я хотел бы услышать ваше мнение.Есть в нете много инфы.А если фомулу будет вычеслять СТМ32 .И присваивать значение в массиве в переменные.СТМ будет успивать?[/uquote]
На STM32 хватит и одного таймера. Это TIMER 1 или TIMER 8 (если не ошибаюсь). С помощью DMA можно организовать их обновление из массива структур. Читайте про регистр TIMx->DMAR и его управляющий регистр. Эта фича позволит даже выдать ШИМ, промодулированный синусом. Правда, шесть ключей потребует (три полумоста).[/uquote]
А я что то сомневаюсь что одного таймера хватит.На управление тем же ШИМом пальцем управлять.В ДМА просто наверное не в прерывании и то вопрос.?два таймера один шим другой в прерывании. Я видел пример.Просто добавил два массива в прерывании.А вообще я думаю не всё так просто на практике будет.Или даже заставить работать с нуля до определённого значения F частоты.
Добавлено after 1 minute 54 seconds:
Извеняюсь в прерывании по ДМА и таймер
Добавлено after 2 minutes 16 seconds:
И нужно на каждый Шим канал ДМА вот Это может сработать.Буду эксперементировать
Добавлено after 1 minute 10 seconds:
Ещё один вопрос обязательно 1 или 8 таймеры брать на вооружение.?
На STM32 хватит и одного таймера. Это TIMER 1 или TIMER 8 (если не ошибаюсь). С помощью DMA можно организовать их обновление из массива структур. Читайте про регистр TIMx->DMAR и его управляющий регистр. Эта фича позволит даже выдать ШИМ, промодулированный синусом. Правда, шесть ключей потребует (три полумоста).[/uquote]
А я что то сомневаюсь что одного таймера хватит.На управление тем же ШИМом пальцем управлять.В ДМА просто наверное не в прерывании и то вопрос.?два таймера один шим другой в прерывании. Я видел пример.Просто добавил два массива в прерывании.А вообще я думаю не всё так просто на практике будет.Или даже заставить работать с нуля до определённого значения F частоты.
Добавлено after 1 minute 54 seconds:
Извеняюсь в прерывании по ДМА и таймер
Добавлено after 2 minutes 16 seconds:
И нужно на каждый Шим канал ДМА вот Это может сработать.Буду эксперементировать
Добавлено after 1 minute 10 seconds:
Ещё один вопрос обязательно 1 или 8 таймеры брать на вооружение.?
Первый и восьмой заточены под генерацию сигналов для силовых схем. Там есть прямой и инверсный выходы с регулировкой мертвого времени между ними для каждого из трех каналов таймера. Четвертый канал, по-моему, не имеет инверсного выхода. Так же, у этих таймеров есть вход аварийного останова с настраиваемыми уровнями на выходах при срабатывании этой защиты. Помимо этого, в STM32F407 есть блок мониторинга кварцевого генератора (его нужно включать отдельно). Если он срабатывает, то эти таймеры так же уходят в защиту.
По поводу DMA. Канал DMA используется один для таймера, однако, сам таймер умеет принимать данные в специальный регистр и раскидывать их по настроенному блоку регистров.
Грубо говоря:
Тут мы отдаем DMA регистр DMAR таймера в качестве адреса периферии
и в регистре DCR настраиваем количество передач и номер регистра таймера, с которого начинать обновление.
В этом примере, когда сработает событие запроса DMA (например, переполнение таймера),
таймер сгенерирует сразу четыре запроса DMA и обновит регистры с CCR1 по CCR4
данными, пришедшими через DMA.
Dimon456 Вы хоть раз настраивали промышленные частотники, например Danfoss или Шнайдер?
Там обороты регулируются частотой выходного напряжения. Обычные асинхронники работают стабильно на частотах от 10 до 60 герц.
И эта частота задается в качестве параметра. О чем это говорит? Правильно, о том, что в этих частотниках реализовано частотное регулирование. И разные производители реализуют его по разному. В лифтовых частотниках слышен легкий свист, что говорит о модуляции скважности ШИМ синусом. Частоту ШИМ можно задрать и до 20кГц, тогда никакого свиста точно не будет.
По поводу DMA. Канал DMA используется один для таймера, однако, сам таймер умеет принимать данные в специальный регистр и раскидывать их по настроенному блоку регистров.
Грубо говоря:
Код: Выделить всё
DMA2_Stream5->PAR = (uint32_t)&TIM1->DMAR; // Perypheral data register address
TIM1->DCR = (0x03 << 8) | 0x0D; // 4 transfers, beginning from TIM1_CCR1
и в регистре DCR настраиваем количество передач и номер регистра таймера, с которого начинать обновление.
В этом примере, когда сработает событие запроса DMA (например, переполнение таймера),
таймер сгенерирует сразу четыре запроса DMA и обновит регистры с CCR1 по CCR4
данными, пришедшими через DMA.
Dimon456 Вы хоть раз настраивали промышленные частотники, например Danfoss или Шнайдер?
Там обороты регулируются частотой выходного напряжения. Обычные асинхронники работают стабильно на частотах от 10 до 60 герц.
И эта частота задается в качестве параметра. О чем это говорит? Правильно, о том, что в этих частотниках реализовано частотное регулирование. И разные производители реализуют его по разному. В лифтовых частотниках слышен легкий свист, что говорит о модуляции скважности ШИМ синусом. Частоту ШИМ можно задрать и до 20кГц, тогда никакого свиста точно не будет.
I am DX168B and this is my favourite forum on internet!
- Сообщения: 1849
- Зарегистрирован: Вс дек 25, 2016 08:34:54
DX168B, ни чего я не настраивал, я просто кнопки жму , вкл и выкл, другие настраивали.
Но исходя чисто из соображений,
ABC - верхние ключи
A'B'C' - нижние ключии если генерировать синус, то мы можем генерить только одну полуволну на каждый ключ,
и если взять и просто инвертировать второй выход - откроем оба ключа в полумосту, увы - проверил и убедился.
Из моих экспериментов с моим двигателем:
- 6 каналов ШИМ, на Атмега168 я реализовал на трех таймерах, одно прерывание по переполнению нулевого таймера и + dds-синтез,
- 6 синус таблиц, A-A' B-B' C-C', каждая таблица формирует свою полу волну синусоиды.
Что показали тесты:
- повышенно энергопотребление, ну не знаю, может полумост хреновый
- повышение частоты ШИМ приводит к снижению мощности на двигателе, попробовал 16кГц 8кГц 4кГц и 2кГц, наибольшая эффективность достигается когда ШИМ находится в районе 2-4кГц
- крутит ровнее, без рывков
- свист, да, присутствует
- синус лучше импульсов, но на импульсах ниже на порядок энергопотребление
Усе...
Но исходя чисто из соображений,
каждый полумост может быть открыт только в одном направленииDX168B писал(а):Правда, шесть ключей потребует (три полумоста).
Спойлер

ABC - верхние ключи
A'B'C' - нижние ключи
и если взять и просто инвертировать второй выход - откроем оба ключа в полумосту, увы - проверил и убедился.
Из моих экспериментов с моим двигателем:
- 6 каналов ШИМ, на Атмега168 я реализовал на трех таймерах, одно прерывание по переполнению нулевого таймера и + dds-синтез,
- 6 синус таблиц, A-A' B-B' C-C', каждая таблица формирует свою полу волну синусоиды.
Что показали тесты:
- повышенно энергопотребление, ну не знаю, может полумост хреновый
- повышение частоты ШИМ приводит к снижению мощности на двигателе, попробовал 16кГц 8кГц 4кГц и 2кГц, наибольшая эффективность достигается когда ШИМ находится в районе 2-4кГц
- крутит ровнее, без рывков
- свист, да, присутствует
- синус лучше импульсов, но на импульсах ниже на порядок энергопотребление
Усе...
А мертвое время выдерживалось между работой верхнего и нижнего плеча полумоста? Или просто инверсия?
Если второе, то оно и не мудрено. В короткий период, когда верхнее плечо еще не закрылось, а нижнее уже открылось,
возникает сквозной ток. Чтобы такого небыло, вводится мертвое время, в течении которого оба плеча закрыты.
Ввести его в рабочий цикл можно как специальными драйверами для полумостов,
так и специальным функционалом таймеров 1 и 8 микроконтроллера STM32.
У AVR таймеров с функцией мертвого времени между комплементарными выходами я не встречал.
По хорошему, оно должно быть так:
1. Верхнее плечо открылось.
2. Событие совпадения счетного и контрольного регистров, верхнее плечо закрылось.
3. Выдержка мертвого времени.
4. Нижнее плечо открылось.
5. Событие переполнения таймера, нижнее плечо закрылось.
6. Выдержка мертвого времени.
7. Переход в пункт 1.
Если второе, то оно и не мудрено. В короткий период, когда верхнее плечо еще не закрылось, а нижнее уже открылось,
возникает сквозной ток. Чтобы такого небыло, вводится мертвое время, в течении которого оба плеча закрыты.
Ввести его в рабочий цикл можно как специальными драйверами для полумостов,
так и специальным функционалом таймеров 1 и 8 микроконтроллера STM32.
У AVR таймеров с функцией мертвого времени между комплементарными выходами я не встречал.
По хорошему, оно должно быть так:
1. Верхнее плечо открылось.
2. Событие совпадения счетного и контрольного регистров, верхнее плечо закрылось.
3. Выдержка мертвого времени.
4. Нижнее плечо открылось.
5. Событие переполнения таймера, нижнее плечо закрылось.
6. Выдержка мертвого времени.
7. Переход в пункт 1.
I am DX168B and this is my favourite forum on internet!
- Сообщения: 1849
- Зарегистрирован: Вс дек 25, 2016 08:34:54
Для каждого канала своя таблица.DX168B писал(а):А мертвое время выдерживалось между работой верхнего и нижнего плеча полумоста?
В таблицах учтено это время, увеличение этого времени приводит к снижению мощности на валу но и снижению энергопотребления.
Сейчас в протеусе погонял на 3 каналах ШИМ + hex-инвертор 7404, я не могу получить на осциллографе такую же картинку как при использовании 6 канального ШИМ.
Добавлено after 2 hours 43 minutes 49 seconds:
Провел еще один экспериментик:
Специальных драйверов у меня нет и как и IGBT транзисторов, поэтому в верхнем ключе стояли p-канальные, видимо их как-то неправильно открывал и они грелись, заменил на n-канальные.
Теперь потребляемый ток стал пропорционален оборотам
Код: Выделить всё
25об/мин 0,2А
50 0,15
100 0,09
150 0,03
200 0,02На синусе потребляемый ток меньше, чем на импульсах.
При синусе и импульсах мне не удается двигатель раскрутить более 300 об/мин.
В моем видео я использовал другой метод, обмотки соединены звездой, на среднюю точек обмоток я подавал + питания, а за место полумостов у меня стояли 3 n-канальных транзистора, в этом случаи я его импульсами разгонял до 1500 об/мин.
Добавлено after 10 minutes 59 seconds:
На счет stm32 3 канала ШИМ я могу состряпать
Спойлер
Код: Выделить всё
TIMx->PSC = 0;
TIMx->ARR = частота;
TIMx->CCR1 = 7;
TIMx->CCR2 = 7;
TIMx->CCR3 = 7;
TIMx->CCMR1 |= TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1PE | TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2PE;
TIMx->CCMR2 |= TIM_CCMR2_OC3M_2 | TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3PE;
TIMx->CCER |= TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC3E;
TIMx->CR1 |= TIM_CR1_CMS_0;
TIMx->CR1 |= TIM_CR1_CEN;
TIMx->EGR |= TIM_EGR_UG;
DMA1_Channelx->CPAR = (uint32_t)(&(TIMx->DMAR));
DMA1_Channelx->CMAR = (uint32_t)(таблица);
DMA1_Channelx->CNDTR = кол-во точек синуса*3;
DMA1_Channelx->CCR |= DMA_CCR_CIRC | DMA_CCR_PSIZE_1 | DMA_CCR_MINC | DMA_CCR_DIR;
TIMx->DCR = (3 << 8) + ((((uint32_t)(&TIMx->CCR1)) - ((uint32_t)(&TIMx->CR1))) >> 2);
TIMx->DIER |= TIM_DIER_UDE;
TIMx->CR1 |= TIM_CR1_CEN;
DMA1_Channelx->CCR |= DMA_CCR_EN;код не проверял
как прикрутить второй таймер?
Нормально работает на F030 таймер 1 как формирователь шим 20 кГц, задается скважность в каждом канале по переполнению таймера 14 в прерывании (можно и DMA) 0-200 Гц. Синус или прямоугольник берется из таблицы,но можно делать корректировку на лету типа U/F или ограничения тока фаз при малой частоте. АЦП через DMA меряет ток фаз. Разгон и замедление в прерывании SysTick. При синусе потребление больше из-за слабых драйверов ключей. Переделываю на более мощные. Вывод на дисплей и обработка кнопок происходит с самым низким приоритетом, перегрузка - с самым высоким. И еще остается вагон времени на COM порт. Правда пока не нужен.
- Сообщения: 1849
- Зарегистрирован: Вс дек 25, 2016 08:34:54
через DMA ты лишишьсяSergi писал(а):можно и DMA
если только таблицу не будешь менять на лету.Sergi писал(а):корректировку на лету типа U/F или ограничения тока фаз при малой частоте.
при чем тут драйвера?Sergi писал(а):При синусе потребление больше из-за слабых драйверов ключей.
Совершенно верно,на лету только в прерывании. И таблицу умножать/делить на лету в прерывании.
Сейчас драйвера не обеспечивают необходимую скорость переключения,требуется увеличивать мертвое время. Ищу более быстрые детали для 20 кГц,экспериментирую. Ну это мелочи.
Сейчас драйвера не обеспечивают необходимую скорость переключения,требуется увеличивать мертвое время. Ищу более быстрые детали для 20 кГц,экспериментирую. Ну это мелочи.
Sergi Смотрите, чтобы сами транзисторы тоже позволяли быстрое переключение, иначе (особенно это касается IGBT)
можно словить тиристорный эффект. Это когда при попытке быстро закрыть транзистор,
он "залипает" в открытом состоянии и закрыть его можно только снятием питания. Для полумоста это сразу смерть.
Dimon456
Два варианта:
1. Используй TIM1 и его комплементарные выходы. Его фишка в том, что он дает по два выхода на один канал (кроме четвертого).
CHx - прямой выход, CHxN - инверсный выход (при правильной конфигурации выходов таймера)
Между выдачей импульсов в CHx и CHxN можно задавать мертвое время (регистр (TIMx_BDTR)).
Это если собираешься модулировать скважность ШИМ синусом и работать по той схеме, которую я описывал выше (работа полумоста).
2. Используй два таймера. Но первый настрой ведущим, второй ведомым. Можно сделать так, что когда первый таймер переполняется,
он выдает событие триггеру второго таймера и тот запускает счет. Таким образом, оба таймера будут работать синхронно и эта синхронность контролируется аппаратно. Оба таймера должны тактироваться одной частотой.
Смотри в даташите синхронизацию таймеров.
можно словить тиристорный эффект. Это когда при попытке быстро закрыть транзистор,
он "залипает" в открытом состоянии и закрыть его можно только снятием питания. Для полумоста это сразу смерть.
Dimon456
Два варианта:
1. Используй TIM1 и его комплементарные выходы. Его фишка в том, что он дает по два выхода на один канал (кроме четвертого).
CHx - прямой выход, CHxN - инверсный выход (при правильной конфигурации выходов таймера)
Между выдачей импульсов в CHx и CHxN можно задавать мертвое время (регистр (TIMx_BDTR)).
Это если собираешься модулировать скважность ШИМ синусом и работать по той схеме, которую я описывал выше (работа полумоста).
2. Используй два таймера. Но первый настрой ведущим, второй ведомым. Можно сделать так, что когда первый таймер переполняется,
он выдает событие триггеру второго таймера и тот запускает счет. Таким образом, оба таймера будут работать синхронно и эта синхронность контролируется аппаратно. Оба таймера должны тактироваться одной частотой.
Смотри в даташите синхронизацию таймеров.
I am DX168B and this is my favourite forum on internet!
- Сообщения: 1849
- Зарегистрирован: Вс дек 25, 2016 08:34:54
А что там умножать/делить? Можно схему глянуть?Sergi писал(а):И таблицу умножать/делить на лету в прерывании.
Ну это только 2 выхода, а нужно 6. И это только один таймер, другие не могут. Этот вариант отпадает.DX168B писал(а):Используй TIM1 и его комплементарные выходы.
Если брать F030, я бы использовал TIM2 1-4 каналы, и TIM3 1-2 каналы.
Так даташит открой. Таймер имеет один счетный регистр и четыре регистра сравнения. То есть, четыре канала. Каждый из них может генерировать ШИМ. Первые три канала имеют по два комплементарных выхода. Разрабатывали эти таймеры как раз с расчетом на управление двигателями.

При такой схеме, синтезировать нужно три таблицы, отражающих полный период синуса + место под 4,18879 радиан угла отклонения фаз.
То есть грубо
Размер таблицы зависит от нужной частоты сигнала.
Генерация таблицы тоже является фигней для STM32F4xx :
Со сдвигом фаз тут вообще фигня. Сдвиг фазы на 120 градусов - это одна треть периода.
Вообще, есть даже краткие статьи на эту тему: ссылка
Там показано, как использовать один таймер (конкретно, первый таймер) для генерации импульсов на шесть ключей с блэк-джеком и синусоидами.
При такой схеме, синтезировать нужно три таблицы, отражающих полный период синуса + место под 4,18879 радиан угла отклонения фаз.
То есть грубо
Код: Выделить всё
TIM1->CCR1 = 0 1 2 3 4 5 4 3 2 1 0 -1 -2 -3 -4 -5 -4 -3 -2 -1 0 1 2 3 4 5 4
TIM1->CCR2 = -3 -2 -1 0 1 2 3 4 5 4 3 2 1 0 -1 -2 -3 -4 -5 -4 -3 -2 -1 0 1 2 3
TIM1->CCR3 = -3 -4 -5 -4 -3 -2 -1 0 1 2 3 4 5 4 3 2 1 0 -1 -2 -3 -4 -5 -4 -3 -2 -1
Генерация таблицы тоже является фигней для STM32F4xx :
Код: Выделить всё
void GenerateSineWave(int32_t f_out, int32_t f_pwm, int16_t* buf, int32_t amplitude)
{
float w = (2 * PI * f_out) / f_pwm;
uint32_t n_samples = f_pwm / f_out;
for(uint32_t i = 0; i < n_samples; i++)
{
buf[i] = (uint16_t)(amplitude * sin(w * i));
}
}
Вообще, есть даже краткие статьи на эту тему: ссылка
Там показано, как использовать один таймер (конкретно, первый таймер) для генерации импульсов на шесть ключей с блэк-джеком и синусоидами.
I am DX168B and this is my favourite forum on internet!
- Сообщения: 1849
- Зарегистрирован: Вс дек 25, 2016 08:34:54
Этот режим не доступен в корпусе TSSOP20.DX168B писал(а):Так даташит открой.
Значит нужно либо менять камень на корпус LQFP32, либо брать другой, где этот таймер полноценно выведен.
Либо мучаться с синхронизацией нескольких таймеров и клепать костыли.
Либо мучаться с синхронизацией нескольких таймеров и клепать костыли.
I am DX168B and this is my favourite forum on internet!
- Сообщения: 1849
- Зарегистрирован: Вс дек 25, 2016 08:34:54
удивил, в прерывании TIM4 грузим с таблицы в регистры CCRх, даже DMA не используем, я это и на атмеги могу.DX168B писал(а):Вообще, есть даже краткие статьи на эту тему:
Мне только одно не понятно, 3 CCRх и 6 выходов, как загружать в остальные 3 выхода? или автоматом получается инвертированный сигнал или еще как?



