Здравствуйте, помогите новичку! До этого никогда не работал с МК, а тут начал с STM32F100 с наскоку.
Вот по одному из многочисленных уроков в инэте написал код и залил в МК.
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_tim.h"
void Init_Timer (void) {
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef Nozka;
Nozka.GPIO_Pin=GPIO_Pin_1;
Nozka.GPIO_Mode=GPIO_Mode_AF_PP;
Nozka.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&Nozka);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_TimeBaseInitTypeDef TIM2_scr;
TIM2_scr.TIM_ClockDivision=TIM_CKD_DIV1;
TIM2_scr.TIM_CounterMode=TIM_CounterMode_Up;
TIM2_scr.TIM_Prescaler=24000-1;
TIM2_scr.TIM_Period=10000;
TIM_TimeBaseInit(TIM2,&TIM2_scr);
TIM_OCInitTypeDef TIM2_OC;
TIM2_OC.TIM_OCMode=TIM_OCMode_PWM1;
TIM2_OC.TIM_OCPolarity=TIM_OCPolarity_High;
TIM2_OC.TIM_Pulse=1000;
TIM2_OC.TIM_OutputState=TIM_OutputState_Enable;
TIM_OC2Init(TIM2,&TIM2_OC);
TIM_Cmd(TIM2,ENABLE);
}
int main (void)
{
Init_Timer();
while(1){};
}
Все работает на ура. Вот только решил пойти дальше, а именно получить положительную полуволну синуса и уткнулся лбом в стену.
В моем понимании задается некий массив со значениями синуса от 0 до 90 градусов, естественно пересчитанными в импульсы увеличивающейся длины. Все это загоняется на полевик IRL3705N.
В CCRx можно записать "0". Счетчик (CNT) массив кушает до 90 градусов синуса, затем значения в CNT и ARR становятся одинаковыми. Счетчик сбрасывается в "0". Как его заставить считать в обратном порядке этот же самый массив? И куда записывать массив? Напрямую в TIMx_CNT ? TIM_Pulse уже не имеет значения и его можно удалять? В TIMx_ARR пихать максимальное значение при синусе 90 градусов?
Пробовал такое сделать но не выходит.
Пока что учусь и прошу не судить меня строго за неправильную терминологию!
Синусоида с помощью STM32F100
Re: Синусоида с помощью STM32F100
Не надо никого заставлять считать в обратном порядке. Счетчик считает и пусть себе считает. Значение синуса загоняется в регистр сравнения. С выхода шим-канала наблюдаем прямоугольный сигнал, в котором коэффициент заполнения соответствует значению синуса. Пропускаем этот сигнал через интегрирующую цепочку и получаем желанный синус.
-
Immortal_Buka
- Родился
- Сообщения: 9
- Зарегистрирован: Ср май 06, 2015 14:21:38
Re: Синусоида с помощью STM32F100
а чему DAC+DMA+TIM Не устраивает?
Re: Синусоида с помощью STM32F100
Immortal_Buka писал(а):а чему DAC+DMA+TIM Не устраивает?
Потому что мне нужно получить трехфазный синус. С помощью DAC я максимум две фазы смогу получить - и то потом все это загонять на полевик ... На практике я не пробовал таким заниматься, но пишут что полевик будет неплохо греться.
- Andrew Martin
- Вымогатель припоя
- Сообщения: 606
- Зарегистрирован: Вт июн 25, 2013 18:45:07
Re: Синусоида с помощью STM32F100
Да вы, батенька, никак на частотник замахнулись?
Сделайте массив синуса от 0 до 360 - не нужно будет ничего переключать.
Сделайте массив синуса от 0 до 360 - не нужно будет ничего переключать.