如何用stm32产生PWM输出?
void Timer4PwmInit(void){GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); //使能GPIO外设和AFIO复用功能模块时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO//初始化TIM4TIM_TimeBaseStructure.TIM_Period = PWM_PERIOD; TIM_TimeBaseStructure.TIM_Prescaler =PRECALERS; TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //初始化TIM4 Channel PWM模式TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能TIM_OCInitStructure.TIM_Pulse = 0;//TIM->CCR = 0TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM4, &TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIM4在CCR1上的预装载寄存器TIM_OC2Init(TIM4, &TIM_OCInitStructure);TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);TIM_OC3Init(TIM4, &TIM_OCInitStructure);TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);TIM_OC4Init(TIM4, &TIM_OCInitStructure);TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);TIM_ARRPreloadConfig(TIM4, ENABLE);TIM_Cmd(TIM4, ENABLE); //使能TIM4}
我想用LM358做一个将0-10V的模拟信号转变为一个PWM调光信号应该怎么做?
如果只是想用纯模拟电路的话,可以先用文森电路产生正弦波(频率大概100Hz,幅值0~10V吧)此波形不应滤除直流,然后将此信号输入LM358的反相输入端。然后将0-10V的模拟值输入同相端。那么LM358输出端就为一个PWM占空比可调的波形。
另外,如果结合类似单片机的数字电路,需用AD采样,很多芯片内部都有这个功能。当然得注意此AD输入上限,以输入5V为例,那么这个0-10V模拟信号需要衰减再采样,简单的就是电阻分压(最好再用LM358做一个跟随器)。然后通过单片机产生占空比可调的PWM波。注意此波的幅值只有5V。

