你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 5843|回复: 2

【MCU实战经验】+基于stm32f103的无刷电机kv值测试器

[复制链接]

2

主题

10

回帖

0

蝴蝶豆

初级会员

最后登录
2019-8-1
发表于 2014-4-18 21:42:41 | 显示全部楼层 |阅读模式
      最近公司刚好想研发一款能够进行图传的四轴,stm32F4系列的mcu强大的控制算法运行能力,丰富的外设功能和易用性吸引了我。刚好碰到st mcu推广活动。特此申请能得到这个试用机会,希望您能给我这个机会。以下是我做的基于stm32f103的无刷电机kv值测试器。
     我这个Kv转速表主要是应用在检测测无刷电机kv 值的。它主要原理是:无刷电机工作过程通过检测电机反电动势会有个梯形波。计算单位时间内梯形波的数量得到在某个电压工作下的转速值。Kv值就=转速值/电压值。
那么简单说明下这个功能实现的原理是通过在电调的ABC三相中两相加个led灯和一个限流电阻。每当有一个梯形波产生时会驱动led灯。图中led是一个光感电阻。将光感电阻和led灯使用热缩套管密封在一起(公司光耦合器用完了)。这样每次有一个梯形波产生,lm358会将信号放大经过speedmcu检测脚一个高电平信号。
QQ图片20131128111507.jpg
 
系统的电压、电流使用adc功能检测,电流使用个精密电阻通过放大电路转换给adc检测脚。
 
以下是ADC配置代码 void ADC1_Configuration(void)
{
  ADC_InitTypeDef ADC_InitStructure;
  ADC_DeInit(ADC1);
  RCC_ADCCLKConfig(RCC_PCLK2_Div6); //72M/6=12,ADC最大时间不能超过14M
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);   //使能DMA传输
  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
  ADC_InitStructure.ADC_ScanConvMode =ENABLE; //模数转换工作在扫描模式
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //模数转换工作在连续转换模式
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //外部触发转换关闭
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC数据右对齐
  ADC_InitStructure.ADC_NbrOfChannel = 2; //顺序进行规则转换的ADC通道的数目
  ADC_Init(ADC1, &ADC_InitStructure); //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器
  ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5 );
  ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_239Cycles5 );
  ADC_DMACmd(ADC1, ENABLE); // 开启ADCDMA支持(要实现DMA功能,还需独立配置DMA通道等参数)
  ADC_Cmd(ADC1, ENABLE); //使能指定的ADC1
ADC_ResetCalibration(ADC1); //复位指定的ADC1的校准寄存器
while(ADC_GetResetCalibrationStatus(ADC1)); //获取ADC1复位校准寄存器的状态,设置状态则等待
ADC_StartCalibration(ADC1); //开始指定ADC1的校准状态
 }
 
 void DMA_Configuration(void)
{
 DMA_InitTypeDef DMA_InitStructure;
 DMA_DeInit(DMA1_Channel1); //DMA的通道1寄存器重设为缺省值
 DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&ADC1->DR; //DMA外设ADC基地址
 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //内存作为数据传输的目的地
 DMA_InitStructure.DMA_BufferSize = 50*2; //DMA通道的DMA缓存的大小
 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外设地址寄存器不变
 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //内存地址寄存器递增
 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //数据宽度为16
 DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //工作在循环缓存模式
 DMA_InitStructure.DMA_Priority = DMA_Priority_High; //DMA通道 x拥有高优先级
 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //DMA通道x没有设置为内存到内存传输
 DMA_Init(DMA1_Channel1, &DMA_InitStructure); //根据DMA_InitStruct中指定的参数初始化DMA的通道
 }
/*求平均值函数*/
void filter(void)
{
int sum = 0;
u8 count;

<span lang="EN-US">for(i=0;i
WP_20140417_003.jpg
<
回复

使用道具 举报

0

主题

1

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2014-5-21 00:26:49 | 显示全部楼层

RE:【MCU实战经验】+基于stm32f103的无刷电机kv值测试器

好!!!!!!!!!!!!!!
回复 支持 反对

使用道具 举报

3

主题

47

回帖

0

蝴蝶豆

初级会员

最后登录
2019-8-8
发表于 2019-7-26 15:17:34 | 显示全部楼层
good
不错,值得学习
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版