没有合适的资源?快使用搜索试试~ 我知道了~
首页用TIM1产生6路ADC,用CCR4触发ADC1的注入通道采样
资源详情
资源评论
资源推荐

用用TIM1产生产生6路路ADC,用,用CCR4触发触发ADC1的注入通道采样的注入通道采样
这几天一直在使用STM32来写sensorless BLDC的驱动框架,那么必须会用到TIM1的CCR1/CCR2/CCR3产生
的六路互补PWM,以及用CCR4来产生一个中断,用来在PWM-ON的时候产生中断进行过零检测,以及相电流
的检测等。
这几天一直在测试PWM,CCR4的中断,ADC1的采样触发+DMA等功能,现在也了解的差不多了,先记录下来,先看下我的
一些设置,TIM1设置:
1 /* Time Base configuration ,init time1 freq*/
2 TIM_TimeBaseStructure.TIM_Period = Period;
3 TIM_TimeBaseStructure.TIM_Prescaler = 0;
4 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
5 TIM_TimeBaseStructure.TIM_ClockDivision = 0;
6 TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
7 TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
8
9 /* Automatic Output enable, Break, dead time and lock configuration*/
10 TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;
11 TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;
12 TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
13 TIM_BDTRInitStructure.TIM_DeadTime = 0;
14 TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;
15 TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;
16 TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
17 TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);
18
19 /*pwm driver set ,channel 1,2,3,4set pwm mode*/
20 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
21 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Disable;
22 TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;
23 TIM_OCInitStructure.TIM_Pulse = 5;
24 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
25 TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
26 TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
27 TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Set;
28 //set OC1/OC1N
29 TIM_OC1Init(TIM1, &TIM_OCInitStructure);
30 //set oc2/oc2n
31 TIM_OCInitStructure.TIM_Pulse = 0;
32 TIM_OC2Init(TIM1, &TIM_OCInitStructure);
33 //set OC3/OC3N
34 TIM_OCInitStructure.TIM_Pulse = 0;
35 TIM_OC3Init(TIM1, &TIM_OCInitStructure);
36 //set adc sample time
37 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//CCR4这个输出使能后才能用来触发ADC1的注入通道采样
38 TIM_OCInitStructure.TIM_Pulse = 0;
39 TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
40 TIM_OC4Init(TIM1, &TIM_OCInitStructure);
41
42 //enable interrupt
43 TIM_ITConfig(TIM1, TIM_IT_CC4, ENABLE);//CCR4的中断,这个通过设置CCR4的pulse来控制产生中断相当于PWM-ON的位置
44 TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);
45 TIM_ITConfig(TIM1, TIM_IT_COM,ENABLE);
46
47 /* BLDC_TIMER_NUM counter enable */
48 TIM_Cmd(TIM1, ENABLE);
49
50 /* Main Output Enable */
51 TIM_CtrlPWMOutputs(TIM1, ENABLE);
ADC1设置,这里采用规则通道+DMA+软件触发,注入通道+CCR4事件触发:
1 ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
2 ADC_InitStructure.ADC_ScanConvMode = ENABLE;
3 ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
4 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
5 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
6 ADC_InitStructure.ADC_NbrOfChannel = 5;
7 ADC_Init(ADC1, &ADC_InitStructure);
8
9 ADC_TempSensorVrefintCmd(ENABLE);
10 ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_239Cycles5);//hand
11 ADC_RegularChannelConfig(ADC1,ADC_Channel_1,2,ADC_SampleTime_239Cycles5);//external temperature
12 ADC_RegularChannelConfig(ADC1,ADC_Channel_2,3,ADC_SampleTime_239Cycles5);//vol
13 ADC_RegularChannelConfig(ADC1,ADC_Channel_10 ,4,ADC_SampleTime_239Cycles5);
14 ADC_RegularChannelConfig(ADC1,ADC_Channel_Vrefint,5,ADC_SampleTime_239Cycles5);
15 //上面规则通道的设置,注意采样时间,我发现如果时间设置过的可能数据会互相干扰


















weixin_38726255
- 粉丝: 2
- 资源: 883
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
最新资源
- ARM Cortex-A(armV7)编程手册V4.0.pdf
- ABB机器人保养总结解析.ppt
- 【超详细图解】菜鸡如何理解双向链表的python代码实现
- 常用网络命令的使用 ipconfig ping ARP FTP Netstat Route Tftp Tracert Telnet nslookup
- 基于单片机控制的DC-DC变换电路
- RS-232接口电路的ESD保护.pdf
- linux下用time(NULL)函数和localtime()获取当前时间的方法
- Openstack用户使用手册.docx
- KUKA KR 30 hA,KR 60 hA机器人产品手册.pdf
- Java programming with JNI
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制

评论0