2015年11月14日 星期六

[馬達控制] 25watt 馬達控制器, part 2 - drv8412

因為上個客戶需要製作更小的馬達驅動板,所以需要改板,但又希望是原本的架構,而這次的SPEC只需要24V1A,大約25watt就可以了,所以這次使用的是drv8412,此driver 可以撐到3A,2軸輸出。  其實已經超出SPEC 許多了,但因為為了相容上板,所以就選擇此driver了。

架構圖的話,就選擇此架構圖,不過因為是2 channel 輸出,所以我們只有選擇其中一組,而用不到的那一組,就讓輸入接地即可。




 pin define 其實和drv8432不一樣,因為瓦數比較小,所以只要靠pcb散熱就好,不像drv8432需要靠外部的散熱片,所以在包裝上也大大的不同。



正面的擺設,又是一樣擠了。 大小約為25mm x 50mm



最後成品的樣子也和模擬結果差不多,不過手焊真的很辛苦啊~~~




謝謝觀看

2015年11月7日 星期六

[stm32] internal timer使用stm32cube


因為discovery 板子上有外接crystal,為了讓之後讓clock可以固定,所以先就設定了RCC,輸入為external crystal



接著設定tim2的clock source為internal timer



clocks configuration的設定如下

目前是設1秒為1次的中斷,所以pre-scler先設47999,counter為999: 這個意思是48M/(47999+1)/(999+1) = 1HZ

這邊要值得注意一下timer2 是使用在APB1 timer的clock source


最後把中斷打開


記得先將上一個實驗TOGGLE的CODE先拿掉,然後在下面幾個地方加入程式片斷,大概就可以看到LED燈一閃一閃了
  /* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim2);
  /* USER CODE END 2 */

/* USER CODE BEGIN 4 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15);
}
/* USER CODE END 4 */






[stm32] 第一次使用stm32cube

雖然stm32cube出了一段時間了,但到了最近才有空來研究stm32cube的使用方式,有興趣的話可以去官網下載來玩看看

這次使用的的板子是stm32f4 discovery的板子,最簡單就是先測試led。
所以就先設定了GPIOD12/GPIOD13/GPIOD14/GPIOD15為Output
可以在gpio的腳位上按滑鼠左鍵,設定為output即可




接著輸出路徑後,直接產生source code和report,我是以keil為主。








 在keil的燒錄的設定,記得將JTAG改成SW

而flash的設定,記得把stm32f4加進來


在option的部分,為了好分辨,請修改output name,如果有使用STM32 ST-LINK Utility的話,最好也產生hex檔



程式的部分的話,比較值得注意的地方:因為是自動產生source code,所以如果要加code的話,一定要加在BEGINEND的中間,這樣才不會再次產生source code 導致自己的code不見了。

因為只是要簡單的測試,所以就讓led閃一閃就好了,程式碼也很簡單,其實我一開始也不知道應該call 什麼API,不過進去看gpio的source code,很快的就知道我要call HAL_GPIO_TogglePin()了:也就是其實只要有一點stm32的概念,其實是不難的才對。

int main(void)
{

  /* USER CODE BEGIN 1 */
int index;
  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();

  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15);
for (index = 0; index < 500000; index++);
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

}



最後,這個就是此次我輸出的report


心得:stm32cube其實有點顛覆以往寫code的方式,可以重複的修改HAL(硬體抽象層),以管理專案的角度的話,直接產生PDF report,就算不用看code,也可以很清楚的知道此次專案使用的狀況,這對於軟體或體硬的工程師來說,可以很快的讓雙方都清楚的了解MCU使用的狀況。

2015年11月6日 星期五

[馬達控制] 25watt 馬達控制器, part 1 - encoder輸出


這次的案子是上次200watt的馬達控制器的縮小版,首先先介紹encoder的輸出:
因為客戶選用的是差動式的encoder輸出,如下圖介紹

而此encoder 建義的電路設計如下,其實就是加個比較器輸出,這種差動encoder的好處就是抗雜訊比較強,用在工控上比較不會受雜訊影響。



為了可以讓整塊板子可以做小,其實幾乎可以用的空間都用上了。

實際上的成品也如3d模擬一樣,不過在焊接的過程就會比較辛苦了。
謝謝觀看!