|
本帖最后由 pythonworld 于 2016-5-12 19:13 编辑 电机测速仪组成:ST188红外传感器+555施密特触发器+STM32开发板+LCD1602液晶显示屏7 V: w& U+ B3 c) R- r& r( n 基本原理就是用定时器捕获功能测量测速脉冲的周期,然后转化为频率和转速。 主程序: int main(void)1 e+ B2 \$ ^7 o {; S5 n; h/ ~: u5 V1 c3 ? ) z# u/ q5 a4 e8 u /* USER CODE BEGIN 1 */ ( T! X0 z/ ~2 m9 L( e B) l$ O /* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ / Z8 J* R% h; ` W' Q, { /* Reset of all peripherals, Initializes the Flash interface and the Systick. */+ P8 A; B) j# r$ b" O HAL_Init(); $ @% @0 C, Z) t$ \ /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init();6 s+ ~# [' S; Q# S MX_USART2_UART_Init(); MX_TIM2_Init();/ J4 ^% B5 o* S" D# r 8 r- R9 m1 ?7 H- h /* USER CODE BEGIN 2 */ / b" ` L2 N7 v0 y! s5 g LCDCOM(0x38); LCDCOM(0x0c); LCDCOM(0x06);+ f6 q0 h3 g: p# y. k LCDCOM(0x01); 6 G! B5 K, p7 A) h: I: @ 7 t5 `5 n6 q0 P% ^4 r) ? HAL_TIM_Base_Start_IT(&htim2); HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1); __HAL_TIM_ENABLE_IT(&htim2, TIM_IT_TRIGGER);# d+ G& T* \7 R, t! M$ u/ x$ [ 9 f" y& Y8 d% o3 g5 ?) i) ~ if(HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1) != HAL_OK) {' o( l2 o* B; @ /* Starting Error */$ n( |) a& G/ N7 _* C8 B% {. A Error_Handler(); } ) Q9 }6 @' O- ~$ A/ G /* USER CODE END 2 */ 8 G8 D# a/ e, B% K5 Y /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */2 i8 N% {2 @" T. h: x- R, O6 _. r /* USER CODE BEGIN 3 */! D4 \" N$ ?- w4 S/ J HAL_Delay(1200);- f& _# y/ ?: } LCDCOM(0x01);, F0 C! ^1 f; u9 i. x HAL_Delay(10); LCDCOM(0x80); " h8 b7 s1 s/ g: F0 Q2 _ if(status)% N- _3 w0 D1 B4 V" f. z( m { status = 0;; E1 Y' f& M: x$ u printf(" %6.0f RPM\n",8000000.0/uwIC2Value2*60);+ d( b) R9 T% i4 y: I& X, D, i) g LCDCOM(0xc0); printf(" RUN \n");. X: E# E5 L8 z: U) S . r% T6 y9 s- E3 f$ X W2 T$ y6 Z' ` if(uwIC2Value2<2) { LCDCOM(0xc0); printf(" HIGH \n"); }/ j8 `2 |+ |& C5 ~8 _7 _ } else {+ u8 T4 |; b/ T' x+ q LCDCOM(0x80);* d1 y5 s, X& C' S' d printf(" 0 RPM \n");1 s! K/ ?2 s0 d- q0 _4 C9 } LCDCOM(0xc0); printf(" STOP \n");8 J+ s5 p+ r; o } // LCDCOM(0x18); } /* USER CODE END 3 */ } 定时器触发捕获回调函数 : void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) L- P; t5 ]1 j; Q( q4 @ {4 I% }% C; _4 l // HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin); uwIC2Value2= HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1); F$ q5 p2 L6 l/ C status = 1;2 e! a# |+ [; I. a9 w# Q5 Y : m) `6 w5 I! j' Z5 Q* t8 ^ } |
1
2
| 给电机个图片 |
给电机个图片![]() ![]() |
| 谢谢楼主分享! |
| 谢楼主分享 |
|
谢谢分享 |
| 签到签到 |
签到一下! |
微信公众号
手机版