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

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

[复制链接]
w919720378 提问时间:2014-4-18 21:42 /
      最近公司刚好想研发一款能够进行图传的四轴,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
收藏 评论2 发布时间:2014-4-18 21:42

举报

2个回答
江山-2047743 回答时间:2014-5-21 00:26:49

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

好!!!!!!!!!!!!!!
cj_miner_lover 回答时间:2019-7-26 15:17:34
good
不错,值得学习

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版