Ejemplo n.º 1
0
void myThread::TimerUpdate()
{

    emit deviceAmbient();
    pwm_test(duty_value/10.0);

}
Ejemplo n.º 2
0
int main_cm3 ( void ) {

#if 1 // go for 120MHz, built into libopencm3
  // requires: external 8MHz crystal on pin5/6 with associated caps to ground
  rcc_clock_setup_hse_3v3 ( &hse_8mhz_3v3 [ CLOCK_3V3_120MHZ ] );
#endif

  // wait a sec, so we have a reflash opportunity before things get funky
  //
  lame_delay_ms ( 2000 );

  // initialize USART1 @ 9600 baud
  //
  init_usart1 ( 9600 );

  usart_puts ( 1, "Init usart1 complete! Hello World!\r\n" );
  //usart_puts ( 2, "Init usart2 complete! Hello World!\r\n" );

  // PWM setup
#if 0
  usart_puts ( 1, "usart1 pwm test start!\r\n" );
  pwm_test();
  usart_puts ( 1, "usart1 pwm test complete!\r\n" );
#endif

  // MPU setup
#if 0
  mpu_test();
  usart_puts ( 1, "usart1 mpu test complete!\r\n" );
#endif

  // balance!
#if 1
  usart_puts ( 1, "usart1 - enter balance mode!\r\n" );
  balance_or_die();
#endif

  //__enable_irq();
  //cm_enable_interrupts();

  while ( 1 ) {
    __asm__("nop");
  } // while forever

  return 0;
}
Ejemplo n.º 3
0
int main(int argc, char *argv[])
{
	if(1 != bcm2835_init())
		return FAIL;

	if(argc != 2)
	{
		uSage();
		return FAIL;
	}
	if (0 == strcasecmp(argv[1], "out"))
	{
		out_test();
	}
	else if (0 == strcasecmp(argv[1], "pud"))
	{
		pud_test();
	}
	else if (0 == strcasecmp(argv[1], "edge"))
	{
		edge_test();
	}
	else if(0 == strcasecmp(argv[1], "pwm"))
	{
		pwm_test();
	}
	else if(0 == strcasecmp(argv[1], "i2c"))
	{
		i2c_test();
	}
	else if(0 == strcasecmp(argv[1], "spi"))
	{
		spi_test();
	}
	else
	{
		uSage();
		return FAIL;
	}
	
	bcm2835_close();
	return 0;
}
Ejemplo n.º 4
0
/********************************** 函数实现区 *********************************/
void pwm_init(void)
{
    uint32_T pre_scale_val = 0;

    /* 
     *
     * 将计数器时钟设置为:15MHz, 计算预分频值
     * PWM_TIMCLK使用 APB1 的时钟 即 HCLK/2
     *
     * 预分频值:
     *    pre_scale_val = (APB1_CLK / PWM_TIM_CLK ) - 1
     * => pre_scale_val = ((SystemCoreClock / 2 ) /15 MHz) - 1
     *
     */
    pre_scale_val = (uint32_t)((SystemCoreClock/2) / 15000000) - 1; 

    /*
     * 设置周期为:1000 便于编程
     * ARR = (PWM_TIM源时钟/PWM_TIM输出频率) - 1
     * => PWM_TIM输出频率 = PWM_TIM源时钟 / (ARR + 1)
     * ARR = 1000
     * PWM_TIM源时钟:15MHz
     * => PWM_TIM输出频率 = 15000000 / (1000 + 1)
     *   = 14.985 kHz
     *
     * 设置PWM_TIM输出频率为20 KHz, 周期(ARR)为:
     * ARR = (PWM_TIM源时钟/PWM_TIM输出频率) - 1
     * = 749
     * */
     s_period = 1000;

    /* 配置PWM_TIM计数器:
     * Initialize PWM_TIM peripheral as follows:
     * Prescaler = (SystemCoreClock / 2 / 15000000) - 1
     * Period = (750 - 1)
     * ClockDivision = 0
     * Counter direction = Up
     * */
    s_tim_handle.Instance               = PWM_TIM;
    s_tim_handle.Init.Prescaler         = pre_scale_val;
    s_tim_handle.Init.Period            = s_period;
    s_tim_handle.Init.ClockDivision     = 0;
    s_tim_handle.Init.CounterMode       = TIM_COUNTERMODE_UP;
    s_tim_handle.Init.RepetitionCounter = 0;
    if (HAL_TIM_PWM_Init(&s_tim_handle) != HAL_OK)
    { 
        ERR_STR("执行失败.");
    }

    /* 各通道的占空比计算如下:
     * PWM_TIM_Channel1 占空比 = (PWM_TIM_CCR1/ PWM_TIM_ARR + 1)* 100
     * PWM_TIM Channel2 占空比 = (PWM_TIM_CCR2/ PWM_TIM_ARR + 1)* 100
     * PWM_TIM Channel3 占空比 = (PWM_TIM_CCR3/ PWM_TIM_ARR + 1)* 100
     * PWM_TIM Channel4 占空比 = (PWM_TIM_CCR4/ PWM_TIM_ARR + 1)* 100 
     *
     * 初始化的时候占空比全0
     */
    /* 所有通道都需要 */
    s_sConfig.OCMode       = TIM_OCMODE_PWM1;
    s_sConfig.OCPolarity   = TIM_OCPOLARITY_HIGH;
    s_sConfig.OCFastMode   = TIM_OCFAST_DISABLE;
    s_sConfig.OCNPolarity  = TIM_OCNPOLARITY_HIGH;
    s_sConfig.OCNIdleState = TIM_OCNIDLESTATE_RESET;
    s_sConfig.OCIdleState  = TIM_OCIDLESTATE_RESET; 

    /* 测试电机 */
    pwm_test();
    /* 关闭电机 */
    pwm_off();

    return;
}