STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25122
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: STM32 новичку в ARM что к чему

Сообщение КРАМ »

menzoda писал(а):А на что еще тратить процессорное время? Наверное круто сделать все через DMA и вообще не использовать вычислительные мощи ядра, но зачем? Даже Cortex-M0 на 50 МГц сможет спокойно управлять двигателем, используя ШИМ 20 КГц (а больше и не нужно), навскидку потратив не более 20% своих мощностей.

Можно и ШИМ использовать программный... :)))
Правда для расчета векторов с учетом динамики двигателя требуется полноценное ДСП ядро...
Как то не очень понятно почему не использовать простой и эффективный инструмент, тем более, что он есть в наличии?
Ну хотя бы из эстетических соображений...
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

Re: STM32 новичку в ARM что к чему

Сообщение menzoda »

Я ведь уже сказал почему. uk8amk не надо особо управлять двигателем, поэтому можно DMA. Мне же всегда приходилось довольно активно им управлять, поэтому DMA я просто не мог использовать. Вот мне и непривычно видеть данное решение данной проблемы.

Если интересно, почему я в своих задачах не мог воспользоваться DMA, то скажи - я напишу, обсудим плюсы/минусы. Может я ошибаюсь и его можно было и там применить.
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: STM32 новичку в ARM что к чему

Сообщение uk8amk »

Все, разобрался!

Код: Выделить всё

Center-aligned mode,
TIM1->RCR = 1;


Теперь UEV генерируется только один раз за период.

Хотел про режимы ШИМ спросить: обычный и центральный.
У первого возможны косяки/всплески на граничных значениях счетчика(например 0 и 255), второй свободен от них, но частота в 2 раза ниже. Есть ли еще существенные различия? На рисунках больше различий не обнаружил.
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

Re: STM32 новичку в ARM что к чему

Сообщение menzoda »

Какие всплески? Что-то никогда не видел.
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: STM32 новичку в ARM что к чему

Сообщение uk8amk »

Код: Выделить всё

edge-aligned PWM
TIM1->ARR=255
TIM1->CCR1=255


На осциллографе будет линия(логич 1) с короткими иголками. Кстати тоже самое и на AVR.
Я вот сколько даташитов и апнотов прочитал, но так и не понял почему именно для двигателей надо использовать центральный ШИМ и чем он так кардинально отличается от обычного кроме двойного прохода.
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

Re: STM32 новичку в ARM что к чему

Сообщение menzoda »

Чего-то я не понял про линию.

Насчет симметричной и асимметричной ШИМ - ерунда, делай что легче. Вот отрывок из техасовского документа:
It has been shown that symmetric PWM signals generate fewer harmonics in the output currents and voltages.

То есть всего лишь будет меньше гармоник на выходе, обмотки будут меньше греться. Да и то, скорее всего вклад этих гармоник будет пренебрежимо мал по сравнению со всеми остальными.

UPD Насчет иголок. Ты про то, что при задании, например, нулевого значения в регистре сравнения таймера, на выходе не будет постоянного нуля, а будут "единичные" иголки каждый период ШИМ? Или что-то другое?
Аватара пользователя
optima
Прорезались зубы
Сообщения: 232
Зарегистрирован: Вт май 08, 2012 10:42:29

Re: STM32 новичку в ARM что к чему

Сообщение optima »

Без выравнивания по центру ты не сможешь получить такого сигнала!
Изображение
при настройках таймера на ШИМ 20 кГц, на обмотке движка получим 40 кГц
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25122
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: STM32 новичку в ARM что к чему

Сообщение КРАМ »

optima писал(а):Без выравнивания по центру ты не сможешь получить такого сигнала!

противофазный сигнал для моста никакого отношения к выравниванию не имеет...
Аватара пользователя
optima
Прорезались зубы
Сообщения: 232
Зарегистрирован: Вт май 08, 2012 10:42:29

Re: STM32 новичку в ARM что к чему

Сообщение optima »

Не совсем понял про противофазный сигнал! можно поконкретнее? это я нарисовал сигнал одной фазы моста плюс и минус одной обмотки! формирует его один таймер.
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: STM32 новичку в ARM что к чему

Сообщение uk8amk »

menzoda
Да, единичные иголки каждый период перезагрузки счетчика.

optima
Понятно.
Но в целом это наверное не повлияет на качество работы моей системы.

Всем спасибо за обсуждение моего вопроса.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25122
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: STM32 новичку в ARM что к чему

Сообщение КРАМ »

optima писал(а):Не совсем понял про противофазный сигнал! можно поконкретнее? это я нарисовал сигнал одной фазы моста плюс и минус одной обмотки! формирует его один таймер.

Два сигнала никак не могут быть отнесены к одной фазе. Если речь идет о питании ОДНОЙ КАТУШКИ двигателя, то схема питания этой ОТДЕЛЬНО ВЗЯТОЙ катушки может быть однотактной или двухтактной (полумостовой или мостовой). Мостовая и полумостовая схемы получают АППАРАТНО СФОРМИРОВАННЫЕ сигналы ОДНОГО ШИМ-канала. И дед-тайм формируется так же аппаратно. К центральному расположению дьюти-цикла внутри периода ШИМ это не имеет ровно никакого отношения.
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

Re: STM32 новичку в ARM что к чему

Сообщение menzoda »

uk8amk писал(а):Да, единичные иголки каждый период перезагрузки счетчика.

Вот это точно полная ерунда. Вообще пофигу. Двигатель даже не заметит. Забудь.
Аватара пользователя
optima
Прорезались зубы
Сообщения: 232
Зарегистрирован: Вт май 08, 2012 10:42:29

Re: STM32 новичку в ARM что к чему

Сообщение optima »

Речь веду именно о мостовой схеме! и управление осуществляется одной фазой, сигнал ЕN в работе не участвует
Изображение
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25122
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: STM32 новичку в ARM что к чему

Сообщение КРАМ »

Вы пытаетесь использовать инструмент не по назначению.
Мостовое питание не требует никакой центровзвешенности. Оно формируется независимо от настроек самого ШИМа. Чисто аппаратно.
Аватара пользователя
optima
Прорезались зубы
Сообщения: 232
Зарегистрирован: Вт май 08, 2012 10:42:29

Re: STM32 новичку в ARM что к чему

Сообщение optima »

Я управляю ШД.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25122
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: STM32 новичку в ARM что к чему

Сообщение КРАМ »

Управляйте чем угодно.
Вот картинки из даташита:
Первые две относятся к расположению OCxREF ВНУТРИ периода ШИМ, а третья показывает как соотносятся сигналы КОМПЛЕМЕНТАРНОГО выхода OCx и OCxN с сигналом OCxREF.
Для формирования мостовой схемы нужно ДВА КОМПЛЕМЕНТАРНЫХ ВЫХОДА. Где будут расположены комплементарные сигналы внутри периода ШИМ абсолютно безразлично. Пока это не касается ФУНКЦИОНАЛЬНОГО СИНТЕЗА СИГНАЛОВ с помощью ШИМ. Вот там центровзвешенность определит искажения синтезируемого сигнала на минимальном уровне...


Изображение

Изображение

Изображение
Аватара пользователя
optima
Прорезались зубы
Сообщения: 232
Зарегистрирован: Вт май 08, 2012 10:42:29

Re: STM32 новичку в ARM что к чему

Сообщение optima »

Ну это всего лишь рисунки даташита!
А вот осциллограммы реально работающего драйвера
Подопытный ШД с углом поворота 0,9 режим полный шаг, контролируемый ток 3,2А напряжение 29 вольт, замер непосредственно на обмотке двигателя, синий луч + желтый -
первая осциллограмма двигатель стоит, остальные в первом ряду вращение 5 об.сек
второй ряд осциллограмм вращение 30 об.сек. И обратите внимание на отсутствие коммутационных помех!

Изображение
Sergi
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Ср янв 04, 2012 11:57:40
Откуда: Алчевск

Re: STM32 новичку в ARM что к чему

Сообщение Sergi »

В своей разработке я управлял шим программно. Времени предостаточно. Нужно учитывать инерцию якоря и всего механизма. А там постоянные времени единицы-десятки миллисекунд. Быстрое изменение шим не является необходимым.
GHOST_J_D
Родился
Сообщения: 12
Зарегистрирован: Пт дек 14, 2012 21:07:49
Откуда: Екатеринбург
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение GHOST_J_D »

подскажите по такому сообщению IAR
Fatal Error[Li004]: file "C:\ARMdemo\Debug\Obj\main.o" is not an object or archive file
Кто виноват и что дальше делать.
Стоит иар 6.5, отдельно копировал cmsis в папку с проектом наплясался с бубнами. Остался вот этот ерор - куда копать не знаю. :(
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: STM32 новичку в ARM что к чему

Сообщение isx »

Здравствуйте!
Написал наконец первую программу к STM (диодиком мигать с кнопки) :) .
Она заработала, но по не совсем понятным для меня причинам (ибо делалась по шаблону от STMF1xx.).
Вот код:

Код: Выделить всё

#include "stm32f0xx.h"
#include "stm32f0xx_rcc.h"
#include "stm32f0xx_gpio.h"

void initAll()
{
    //Объявляем переменную port типа GPIO_InitTypeDef
    GPIO_InitTypeDef port;
    //Это функция из файла stm32f10x_rcc.c, включает тактирование на GPIOA
    //GPIOA сидит на шине APB2
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
    //Про эту функцию напишу чуть ниже
    GPIO_StructInit(&port);
    //Заполняем поля структуры нужными значениями
    //Первый вывод – вход для обработки нажатия кнопки – PA1
    port.GPIO_Mode = GPIO_Mode_IN;
    port.GPIO_Pin = GPIO_Pin_1;
    port.GPIO_Speed = GPIO_Speed_2MHz; 
    //А про эту функцию мы уже говорили   
    //Отметим только что один из параметров – указатель(!) на 
    //нашу структуру
    GPIO_Init(GPIOA, &port);   
    port.GPIO_Mode = GPIO_Mode_OUT;   
    port.GPIO_Pin = GPIO_Pin_1; 
    port.GPIO_Speed = GPIO_Speed_2MHz;   
    GPIO_Init(GPIOB, &port);
}
/*******************************************************************/
int main()
{
    //Объявляем переменную для хранения состояния кнопки 
    uint8_t buttonState = 0;     
    initAll(); 
    while(1)   
    {   
        //С помощью функции из SPL считываем из внешнего мира     
        //состояние кнопки       
        buttonState = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1); 
        if (buttonState == 1)
        {   
            GPIO_SetBits(GPIOB, GPIO_Pin_1);
        }   
        else   
        {     
            GPIO_ResetBits(GPIOB, GPIO_Pin_1);
        }
    }
}

Обязательно ли делать void initAll()? В CVAVR я просто после объявления переменных проводил инициализацию и всё...
Вот момент настройки пина1 порта B:
port.GPIO_Mode = GPIO_Mode_OUT;
port.GPIO_Pin = GPIO_Pin_1;
port.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOB, &port);

То есть, сначала мы проводим саму настройку, а потом объявляем порт, к которому эти настройки будут отнесены (GPIO_Init(GPIOB, &port);)?
А вообще, стоит ли использовать SPL? Раньше я как-то битами всё делал, и понятно всё было (это в АВР :) ), а тут ещё и библиотеку изучать приходится... Но вроде говорят удобно в дальнейшем... :dont_know:
Ах да... И ещё... Как заставить КЕЙЛ показывать мне состояние переменных во время отладки?
Ответить

Вернуться в «ARM»