本人在一个帖子中看到用考毕兹振荡器驱动的超声波换能片,于是想到STM32F1的PWM功能来得到一个高频脉冲来驱动它。如果是一款工作电压24v、谐振频率为110khz的换能片,这样接合适吗
MOS管的栅极用PB8控制,那么我想问的是110khz的谐振频率用32怎么实现,我的想法如代码所示
[mw_shl_code=c,true]int main()
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能或者失能APB2外设时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//使能或者失能APB1外设时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//最高输出速率50MHz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化外设GPIOx寄存器
TIM_TimeBaseStructure.TIM_Prescaler =21;//预分频值
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数模式
TIM_TimeBaseStructure.TIM_Period =20;//在下一个更新事件装入活动的自动重装载寄存器周期的值
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//TDTS = Tck_tim
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);//初始化
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//PWM模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//使能
TIM_OCInitStructure.TIM_Pulse = 0;//脉冲宽度,由这个设置占空比
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//高电平有效
TIM_OC3Init(TIM4,&TIM_OCInitStructure);//初始化
TIM_Cmd(TIM4, ENABLE);//使能或者失能TIMx外设
while(1)
{
TIM_SetCompare3(TIM4,10 );//设置TIMx捕获比较3寄存器值
}
}
[/mw_shl_code]
具体的我想问下分频系数、自动重装载值怎么算,还有就是
TIM_SetCompare3(TIM4,10 )中的那个比较值怎么设定,不知道这种方法是否合适,如果合适的话请大神指导,不合适的话希望能有别的方法
嗯嗯 是的 最好加个光耦隔离
按谐振频率110khz为例,(72MHZ/分频系数)/重装载值=110khz吗?
参考手册上写的很清楚的
一周热门 更多>